package jwt

import (
	"github.com/golang-jwt/jwt"
)

// 使用 secret 的 jwt 封装
type String struct {
	Secret []byte
}

// jwt-rsa 加密数据
func (j *String) GenerateToken(claims jwt.Claims) (token string, err error) {
	return jwt.
		NewWithClaims(jwt.SigningMethodHS256, claims).
		SignedString(j.Secret)
}

// jwt-rsa 解密 token
func (j *String) ParseToken(tokenString string, claim jwt.Claims) error {
	pToken, err := jwt.ParseWithClaims(tokenString, claim, func(token *jwt.Token) (interface{}, error) {
		return j.Secret, nil
	})
	if err != nil {
		return err
	}
	return pToken.Claims.Valid()
}

/**
 * 字符串密码形式的 jwt 配置数据结构
 */
type ConfString struct {
	Secret string // 密码
}

// 新建 jwt-string 组件
func NewString(conf *ConfString) IJwtEntry {
	return &String{
		Secret: []byte(conf.Secret),
	}
}
